package logica;

import java.net.URL;

import javax.ejb.Stateless;
import javax.inject.Inject;

import cliente_agencia.RespuestaAgencia;
import cliente_agencia.TransferenciaEntrante;
import cliente_agencia.TransferenciaWS;
import cliente_agencia.TransferenciaWSService;
import modelo.Banco;
import modelo.Respuesta;
import modelo.Transferencia;
import dao.BancoDAO;

@Stateless
public class TransferenciaIntermediario 
{
	
	
	@Inject
	BancoDAO bdao;
	
	public Respuesta transferir(Transferencia t)
	{
		Respuesta respuesta=new Respuesta();
		if(bdao.buscar(t.getBco_cod_origen())!=null)
		{
			System.out.println("buscando Banco origen :"+t.getBco_cod_origen());
			Banco destino=bdao.buscarPorNombre(t.getBco_nombre_destino());
			if(destino!=null)
			{
				System.out.println("buscando Banco destino :"+t.getBco_nombre_destino());
			
				String url=destino.getBco_WStransfer(); //obtiene el url del wsdl al que debe conectarse
			
				TransferenciaEntrante transEntrante=new TransferenciaEntrante();
				transEntrante.setCtaDestino(t.getCta_destino());
				transEntrante.setCedulaClienteDestino(t.getCedula_cliente_destino());
				transEntrante.setCtaOrigen(t.getCta_origen());
				transEntrante.setMonto(t.getMonto());
				transEntrante.setTipoCuenta(t.getTipo_Cuenta());
				transEntrante.setBcoCodOrigen(bdao.buscar(t.getBco_cod_origen()).getBco_nombre());
				transEntrante.setBcoNombreDestino(t.getBco_nombre_destino());
				transEntrante.setCedulaClienteOrigen(t.getCedula_cliente_origen());
				
				RespuestaAgencia ra=enviarToAgencia(transEntrante, url);
				respuesta.setCodigo(ra.getCodigo());
				respuesta.setMensaje(ra.getMensaje());
				
			}else{
				respuesta.setMensaje("Banco destino "+t.getBco_nombre_destino()+" No registrado");
				respuesta.setCodigo(0);
			}	
		}
		else{
			respuesta.setMensaje("Banco origen "+t.getBco_nombre_destino()+" No registrado");
			respuesta.setCodigo(0);
		
		}
		return respuesta;
	}
	
	
	
	
	public RespuestaAgencia enviarToAgencia(TransferenciaEntrante t , String url)
	{
	
		try {
			System.out.println("Conectando a "+url);
			TransferenciaWSService servicio= new  TransferenciaWSService (new URL(url));
			TransferenciaWS cliente=servicio.getTransferenciaWSPort();
			return cliente.recibirTransferencia(t);
		} catch (Exception e) {	}
		
		RespuestaAgencia error=new RespuestaAgencia();
		error.setCodigo(0);
		error.setMensaje("No se logro establecer la conexion con la Agencia");
		return error;
	}

}
